home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue31 / survive / Builder1.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1997-11-18  |  3.8 KB  |  138 lines

  1. unit Builder1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   StdCtrls, DB, DBTables, DBCtrls, ExtCtrls;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     tblSource: TTable;
  12.     Memo1: TMemo;
  13.     btnBuildKeywordIndex1: TButton;
  14.     DataSource1: TDataSource;
  15.     btnBuildKeywordIndex2: TButton;
  16.     qryDelete1: TQuery;
  17.     dbMain: TDatabase;
  18.     qryAdd1: TQuery;
  19.     qryAdd2: TQuery;
  20.     qryDelete2: TQuery;
  21.     procedure btnBuildKeywordIndex1Click(Sender: TObject);
  22.     procedure btnBuildKeywordIndex2Click(Sender: TObject);
  23.   private
  24.   public
  25.   end;
  26.  
  27. var
  28.   Form1: TForm1;
  29.  
  30. implementation
  31.  
  32. {$R *.DFM}
  33.  
  34. uses
  35.   Scanner;
  36.  
  37. procedure TForm1.btnBuildKeywordIndex1Click(Sender: TObject);
  38. var
  39.   MemoScanner: TMemoScanner;
  40.   I: Integer;
  41.   RecID: Integer;
  42. begin
  43.   with tblSource do begin
  44.     First;
  45.     while not Eof do begin
  46.       MemoScanner := TMemoScanner.Create(TBLOBField(FieldByName('Notes')));
  47.       try
  48.         with MemoScanner do begin
  49.           Scan;  { Scan the memo for keywords }
  50.           dbMain.StartTransaction;
  51.           try
  52.             RecID := Trunc(tblSource.FieldByName('Species No').AsFloat);
  53.             Memo1.Lines.Add(Format('Indexing %d; found %d keywords', [RecId, KeywordCount]));
  54.  
  55.             { Delete any existing keywords for this memo }
  56.             with qryDelete1 do begin
  57.               { SQL=DELETE FROM BioLifeIdx1 WHERE RecordID = :RecordID }
  58.               ParamByName('RecordID').AsInteger := RecID;
  59.               ExecSQL;
  60.             end;
  61.  
  62.             { Rewrite new keywords }
  63.             for I := 0 to KeywordCount - 1 do
  64.               with qryAdd1 do begin
  65.                 { SQL=INSERT BioLifeIdx1 VALUES (:Keyword, :RecordID) }
  66.                 ParamByName('Keyword').AsString := Keywords[I];
  67.                 ParamByName('RecordID').AsInteger := RecID;
  68.                 ExecSQL;
  69.               end;
  70.             dbMain.Commit;
  71.           except
  72.             dbMain.Rollback;
  73.             raise;
  74.           end;
  75.         end;
  76.       finally
  77.         MemoScanner.Free;
  78.       end;
  79.       Next;
  80.     end;
  81.   end;
  82.   Memo1.Lines.Add('Done');
  83. end;
  84.  
  85. procedure TForm1.btnBuildKeywordIndex2Click(Sender: TObject);
  86. var
  87.   MemoScanner: TMemoScannerExt;
  88.   I: Integer;
  89.   RecID: Integer;
  90. begin
  91.   with tblSource do begin
  92.     First;
  93.     while not Eof do begin
  94.       MemoScanner := TMemoScannerExt.Create(TBLOBField(FieldByName('Notes')));
  95.       try
  96.         with MemoScanner do begin
  97.           Scan;  { Scan the memo for keywords }
  98.           dbMain.StartTransaction;
  99.           try
  100.             RecID := Trunc(tblSource.FieldByName('Species No').AsFloat);
  101.             Memo1.Lines.Add(Format('Indexing %d; found %d keywords', [RecId, KeywordCount]));
  102.  
  103.             { Delete any existing keywords for this memo }
  104.             with qryDelete2 do begin
  105.               { SQL=DELETE FROM BioLifeIdx2 WHERE RecordID = :RecordID }
  106.               ParamByName('RecordID').AsInteger := RecID;
  107.               ExecSQL;
  108.             end;
  109.  
  110.             { Rewrite new keywords }
  111.             for I := 0 to KeywordCount - 1 do
  112.               with qryAdd2 do begin
  113.                 { SQL=INSERT BioLifeIdx2 VALUES
  114.                         (:Keyword, :RecordID, :WordOffset, :ByteOffset) }
  115.                 ParamByName('Keyword').AsString := Keywords[I];
  116.                 ParamByName('RecordID').AsInteger := Trunc(tblSource.FieldByName('Species No').AsFloat);
  117.                 ParamByName('WordOffset').AsInteger := WordOffset[I];
  118.                 ExecSQL;
  119.               end;
  120.             dbMain.Commit;
  121.           except
  122.             dbMain.Rollback;
  123.             raise;
  124.           end;
  125.         end;
  126.       finally
  127.         MemoScanner.Free;
  128.       end;
  129.       Next;
  130.     end;
  131.   end;
  132.   Memo1.Lines.Add('Done');
  133. end;
  134.  
  135.  
  136.  
  137. end.
  138.